package com.example.demo.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

/**
 * 密码加盐算法
 */
public class PasswordSecurity {

    // 加密
    public static String encryty(String password) {
        //使用 UUID 生成一个随机值(36)，去掉其中的 -，表示 32 位盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        //使用 md5 对 盐值和密码 的拼接进行加密
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        //生成最终密码(按照约定格式进行拼接盐值，方便解密)
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    // 解密
    public static String encryty(String password, String salt) {
        // 密码拼接盐值进行 md5 加密
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 生成最终密码
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    /**
     * @param inputPassword 用户输入密码
     * @param finalPassword 数据库中保存的最终密码
     * @return
     */
    public static boolean check(String inputPassword, String finalPassword) {
        //非空校验
        if(!StringUtils.hasLength(inputPassword) ||
                !StringUtils.hasLength(finalPassword)) {
            return false;
        }
        //得到盐值
        String salt = finalPassword.split("\\$")[0];
        //生成最终密码
        String checkPassword = encryty(inputPassword, salt);
        if(checkPassword.equals(finalPassword) && finalPassword.length() == 65) {
            return true;
        }
        return false;
    }

}

// 测试
//class Main {
//    public static void main(String[] args) {
//        //用户注册
//        String regPassword = "123";
//        String finalPassword = PasswordSecurity.encryty(regPassword);
//        System.out.println(finalPassword);
//        //用户登录
//        String logPassword = "1235";
//        if(PasswordSecurity.check(logPassword, finalPassword)) {
//            System.out.println("密码正确");
//            return;
//        }
//        System.out.println("密码错误");
//    }
//}
